﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Policlinica;

namespace Dal
{
	/// <summary>
	/// Репозиторий для сущностей
	/// </summary>
	/// <typeparam name="T">Тип сущности</typeparam>
    public interface IRepository<T> 
	{
		///// <summary>
		///// Запрос к хранилищу сущностей
		///// </summary>
		//IQueryable<T> Entities { get; }

		/// <summary>
		/// Добалвение новой сущности
		/// </summary>
		/// <param name="entity">Добавляемая сущность</param>
		/// <returns>Добавленная сущность (с заполненным идентификатором)</returns>
        T Insert(T entity);

		/// <summary>
		/// Содержится ли сущность в хранилище
		/// </summary>
		/// <param name="entity">Сущность</param>
		/// <returns><para>True</para> если содержится, иначе <para>False</para></returns>
       // bool Contains(T entity);

		/// <summary>
		/// Кол-во сущностей
		/// </summary>
		//int Count { get; }

		/// <summary>
		/// Получение сущности по идентификатору
		/// </summary>
		/// <param name="id">идентификатор сущности</param>
		/// <returns>Запрашиваемая сущность</returns>
        T GetById(int id);

		/// <summary>
		/// Изменение сущности
		/// </summary>
		/// <param name="entity">Сущность для изменения</param>
		/// <returns>Измененная сущность</returns>
        T Update(T entity);

		/// <summary>
		/// Удаление сущности
		/// </summary>
		/// <param name="entity">Сущность для удаления</param>
		/// <returns>В случае успешного удаления <para>True</para>, иначе <para>False</para></returns>
        void Delete(int id);

        /// <summary>
        /// Получение списка сущностей
        /// </summary>
	    List<T> GetList();

	    List<T> GetByParameter(object parameter, string columnName);
	}
}
